home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / asm-mn10300 / thread_info.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  4.7 KB  |  171 lines

  1. /* MN10300 Low-level thread information
  2.  *
  3.  * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
  4.  * Written by David Howells (dhowells@redhat.com)
  5.  *
  6.  * This program is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU General Public Licence
  8.  * as published by the Free Software Foundation; either version
  9.  * 2 of the Licence, or (at your option) any later version.
  10.  */
  11.  
  12. #ifndef _ASM_THREAD_INFO_H
  13. #define _ASM_THREAD_INFO_H
  14.  
  15. #ifdef __KERNEL__
  16.  
  17. #include <asm/page.h>
  18.  
  19. #ifndef __ASSEMBLY__
  20. #include <asm/processor.h>
  21. #endif
  22.  
  23. #define PREEMPT_ACTIVE        0x10000000
  24.  
  25. #ifdef CONFIG_4KSTACKS
  26. #define THREAD_SIZE        (4096)
  27. #else
  28. #define THREAD_SIZE        (8192)
  29. #endif
  30.  
  31. #define STACK_WARN        (THREAD_SIZE / 8)
  32.  
  33. /*
  34.  * low level task data that entry.S needs immediate access to
  35.  * - this struct should fit entirely inside of one cache line
  36.  * - this struct shares the supervisor stack pages
  37.  * - if the contents of this structure are changed, the assembly constants
  38.  *   must also be changed
  39.  */
  40. #ifndef __ASSEMBLY__
  41.  
  42. struct thread_info {
  43.     struct task_struct    *task;        /* main task structure */
  44.     struct exec_domain    *exec_domain;    /* execution domain */
  45.     unsigned long        flags;        /* low level flags */
  46.     __u32            cpu;        /* current CPU */
  47.     __s32            preempt_count;    /* 0 => preemptable, <0 => BUG */
  48.  
  49.     mm_segment_t        addr_limit;    /* thread address space:
  50.                            0-0xBFFFFFFF for user-thead
  51.                            0-0xFFFFFFFF for kernel-thread
  52.                         */
  53.     struct restart_block    restart_block;
  54.  
  55.     __u8            supervisor_stack[0];
  56. };
  57.  
  58. #else /* !__ASSEMBLY__ */
  59.  
  60. #ifndef __ASM_OFFSETS_H__
  61. #include <asm/asm-offsets.h>
  62. #endif
  63.  
  64. #endif
  65.  
  66. /*
  67.  * macros/functions for gaining access to the thread information structure
  68.  *
  69.  * preempt_count needs to be 1 initially, until the scheduler is functional.
  70.  */
  71. #ifndef __ASSEMBLY__
  72.  
  73. #define INIT_THREAD_INFO(tsk)            \
  74. {                        \
  75.     .task        = &tsk,            \
  76.     .exec_domain    = &default_exec_domain,    \
  77.     .flags        = 0,            \
  78.     .cpu        = 0,            \
  79.     .preempt_count    = 1,            \
  80.     .addr_limit    = KERNEL_DS,        \
  81.     .restart_block = {            \
  82.         .fn = do_no_restart_syscall,    \
  83.     },                    \
  84. }
  85.  
  86. #define init_thread_info    (init_thread_union.thread_info)
  87. #define init_stack        (init_thread_union.stack)
  88. #define init_uregs                            \
  89.     ((struct pt_regs *)                        \
  90.      ((unsigned long) init_stack + THREAD_SIZE - sizeof(struct pt_regs)))
  91.  
  92. extern struct thread_info *__current_ti;
  93.  
  94. /* how to get the thread information struct from C */
  95. static inline __attribute__((const))
  96. struct thread_info *current_thread_info(void)
  97. {
  98.     struct thread_info *ti;
  99.     asm("mov sp,%0\n"
  100.         "and %1,%0\n"
  101.         : "=d" (ti)
  102.         : "i" (~(THREAD_SIZE - 1))
  103.         : "cc");
  104.     return ti;
  105. }
  106.  
  107. /* how to get the current stack pointer from C */
  108. static inline unsigned long current_stack_pointer(void)
  109. {
  110.     unsigned long sp;
  111.     asm("mov sp,%0; ":"=r" (sp));
  112.     return sp;
  113. }
  114.  
  115. #define __HAVE_ARCH_THREAD_INFO_ALLOCATOR
  116.  
  117. /* thread information allocation */
  118. #ifdef CONFIG_DEBUG_STACK_USAGE
  119. #define alloc_thread_info(tsk) kzalloc(THREAD_SIZE, GFP_KERNEL)
  120. #else
  121. #define alloc_thread_info(tsk) kmalloc(THREAD_SIZE, GFP_KERNEL)
  122. #endif
  123.  
  124. #define free_thread_info(ti)    kfree((ti))
  125. #define get_thread_info(ti)    get_task_struct((ti)->task)
  126. #define put_thread_info(ti)    put_task_struct((ti)->task)
  127.  
  128. #else /* !__ASSEMBLY__ */
  129.  
  130. #ifndef __VMLINUX_LDS__
  131. /* how to get the thread information struct from ASM */
  132. .macro GET_THREAD_INFO reg
  133.     mov    sp,\reg
  134.     and    -THREAD_SIZE,\reg
  135. .endm
  136. #endif
  137. #endif
  138.  
  139. /*
  140.  * thread information flags
  141.  * - these are process state flags that various assembly files may need to
  142.  *   access
  143.  * - pending work-to-be-done flags are in LSW
  144.  * - other flags in MSW
  145.  */
  146. #define TIF_SYSCALL_TRACE    0    /* syscall trace active */
  147. #define TIF_NOTIFY_RESUME    1    /* resumption notification requested */
  148. #define TIF_SIGPENDING        2    /* signal pending */
  149. #define TIF_NEED_RESCHED    3    /* rescheduling necessary */
  150. #define TIF_SINGLESTEP        4    /* restore singlestep on return to user mode */
  151. #define TIF_RESTORE_SIGMASK    5    /* restore signal mask in do_signal() */
  152. #define TIF_POLLING_NRFLAG    16    /* true if poll_idle() is polling TIF_NEED_RESCHED */
  153. #define TIF_MEMDIE        17    /* OOM killer killed process */
  154. #define TIF_FREEZE        18    /* freezing for suspend */
  155.  
  156. #define _TIF_SYSCALL_TRACE    +(1 << TIF_SYSCALL_TRACE)
  157. #define _TIF_NOTIFY_RESUME    +(1 << TIF_NOTIFY_RESUME)
  158. #define _TIF_SIGPENDING        +(1 << TIF_SIGPENDING)
  159. #define _TIF_NEED_RESCHED    +(1 << TIF_NEED_RESCHED)
  160. #define _TIF_SINGLESTEP        +(1 << TIF_SINGLESTEP)
  161. #define _TIF_RESTORE_SIGMASK    +(1 << TIF_RESTORE_SIGMASK)
  162. #define _TIF_POLLING_NRFLAG    +(1 << TIF_POLLING_NRFLAG)
  163. #define _TIF_FREEZE        +(1 << TIF_FREEZE)
  164.  
  165. #define _TIF_WORK_MASK        0x0000FFFE    /* work to do on interrupt/exception return */
  166. #define _TIF_ALLWORK_MASK    0x0000FFFF    /* work to do on any return to u-space */
  167.  
  168. #endif /* __KERNEL__ */
  169.  
  170. #endif /* _ASM_THREAD_INFO_H */
  171.